C# .NStar (Pre-Pre-Alpha) 0.09



Привет, неизвестный путник! Здесь вы можете просмотреть информацию об C# .NStar (Pre-Pre-Alpha) 0.09. Вы можете скачать EXE или просмотреть список изменений, скриншоты и/или видео.
Что уже проверено и работает в дополнение к версии Preview 1.0:
1. Список ошибок теперь работает именно в виде списка, а не в виде конкатенаций строк в цикле. Думаю, для знакомых с C# .NET последствия очевидны.
2. Следующие статические функции: DateTime.Compare(), DateTime.DaysInMonth(), DateTime.FromBinary(), DateTime.IsLeapYear().
3. Следующие экземплярные функции: DateTime.AddDays(), DateTime.AddHours(), DateTime.AddMilliseconds(), DateTime.AddMinutes(), DateTime.AddMonths(), DateTime.AddSeconds(), DateTime.AddTicks(), DateTime.AddYears(), DateTime.CompareTo(), DateTime.IsSummertime(), DateTime.SpecifyKind(), DateTime.ToBinary(), DateTime.ToLocalTime(), DateTime.ToUniversalTime(), list.Add() (может добавить как один элемент, так и целый список; то же самое касается функций, помеченных далее (*)), list.Clear(), list.Contains() (*), list.GetRange(), list.IndexOf() (*), list.Insert() (*), list.LastIndexOf() (*), list.Remove() (при передаче двух параметров удаляет диапазон, вызов с одним параметром удалит от этого индекса до конца списка), list.RemoveLast(), list.Reverse(), string.Contains(), string.ContainsAny(), string.ContainsAnyExcluding(), string.Count(), string.EndsWith(), string.GetAfter(), string.GetBefore(), string.IndexOf(), string.IndexOfAny(), string.IndexOfAnyExcluding(), string.Insert(), string.LastIndexOf(), string.LastIndexOfAny(), string.LastIndexOfAnyExcluding(), string.Remove(), string.Replace(), string.Split(), string.StartsWith(), string.Substring(), string.ToCharList(), string.ToLower(), string.ToUpper(), string.Trim(), string.TrimEnd(), string.TrimStart().
4. Следующие типы: byte, long int, unsigned long int, list() T, System.Func[TResult, T1, T2, ...].
5. Пространства имен.
6. Списки и индексы.
7. Процедурный подход в прошлом! Теперь процветает структурное программирование: классы, методы и свойства могут быть как статическими, так и экземплярными, экземплярные классы могут быть сконструированы, присутствует даже инкапсуляция в виде модификаторов closed, protected и internal. К сожалению, полноценного объектно-ориентированного программирования еще нет вследствие отсутствия наследования и полиморфизма.
8. Циклы следующих типов: loop, repeat (n), while (condition), for (type var in collection). Для выполнения действий заранее неизвестное число раз подходит только цикл while, так как в repeat выражение вычисляется один раз, и изменение входящих в него переменных после этого бесполезно, а попытка изменить коллекцию в for может привести к непредсказуемым последствиям.
9. Операторы break и continue.
10. Сложные условия с разными комбинациями ядер в фигурных скобках и без них. Разумеется, до бесконечной глубины проверить нельзя, но доступные мне проверки отлажены.
11. Можно обратиться к свойству или функции, входящим в тот же класс, что и место вызова, или во включающий класс, без явного указания имени класса.
12. Делегаты. Но лямбды не работают. В делегат можно подставлять только полноценную функцию, но большое преимущество в этом плане над ранним C# .NET - то, что функции и даже классы с самой первой версии могут быть объявлены внутри других функций.
Что уже проверено и не работает в дополнение к версии Preview 1.0:
1. Циклы следующих типов: loop-while, for-while, repeat-while.
2. Конструкции switch.
3. Кортежи. Внезапно реализовать их оказалось сложнее, чем я думал, из-за сложных комбинаций сингулярных кортежей. Но у меня уже есть наброски плана по исправлению.
4. Сокращенный вид списка (() T).
5. Комментарии все еще не работают!
Рабочие примеры кода на C# .NStar:
list(3) int a = (((1, 2, 3), (4, 5, 6), (7, 8, 9)), ((10, 11, 12), (13, 14, 15), (16, 17, 18)), ((19, 20, 21), (22, 23, 24), (25, 26, 27)));
return a[1, 2, 3];



Class MyClass
{
   int a = 5;
   real b = 3.14159;
   string c = "A";
 
   Constructor(bool bool)
   {
      if (bool)
      {
         a = 12;
      }
   }
}
MyClass a1 = new MyClass();
MyClass a2 = new MyClass(8, 2.71828, "$");
MyClass a3 = new MyClass(8, 2.71828);
MyClass a4 = new MyClass(true);
return (a1, a2, a3, a4);



real a = 0;
loop
{
   if !(a >= 10)
      a++;
   else if !(a >= 12)
   {
      a += 0.25;
      continue;
   }
   else if !(a > null)
      continue;
   else
   {
      break;
   }
}
return a;



real Function F(real x, real y)
{
   return x * x + x * y + y * y;
}
System.Func[real, real, real] f;
f = F;
real a = f(3.14159, 2.71828);
f = Max;
real b = f(3.14159, 2.71828);
return (a, b);
Все остальное не проверено и, скорее всего, не работает.

Ссылка на EXE



Назад ко всем версиям